/**
 * \class ExpressionContext.h
 *
 *  \brief Expression context works on the expression context.
 *
 *  Hmmm it seems that this is not necessary..
 *  I will keep it for a while to see if it really doesn't have any responsiblility.
 *
 *
 *  Created on: 15 apr 2011
 *      \author: Calle
 *
 *   \ingroup Context
 *
 *
 */

#ifndef EXPRESSIONCONTEXT_H_
#define EXPRESSIONCONTEXT_H_

#include "IContextDecorator.h"

class IContext;

class ExpressionContext: public IContextDecorator {
public:
	ExpressionContext(IContext* context);
	virtual ~ExpressionContext();

	/**
	 *  \brief n/a
	 *
	 *  Not available
	 *
	 * @param ident
	 * @return
	 */
	virtual bool identExists(const Ident& ident) const;
	/**
	 * \brief n/a
	 *
	 * Not available
	 *
	 * @param type
	 * @param ident
	 * @return
	 */
	virtual bool addIdent(const IType& type,const Ident& ident);
	/**
	 * \brief n/a
	 *
	 * Not available
	 *
	 *
	 * @param ident
	 * @return
	 */

	virtual bool removeIdent(const Ident& ident);

	/**
	 * \brief n/a
	 *
	 * not available
	 * @param ident
	 * @return
	 */
	virtual bool findType(const Ident& ident,TypeEnum& type)const;

	/**
	 * \todo FIX ALL THE GetAllOfType...
	 * @param type
	 * @param list
	 */
	virtual void getAllOfType(TypeEnum type, IContext::TypeList& list) const;
};

#endif /* EXPRESSIONCONTEXT_H_ */
